package com.huixue.cn.ztej.constants;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;


/**
 * 读取.properties文件配置信息工具类
 */
public class PropertiesUtils {

	private static Map<String, Map<String, String>> resources = new ConcurrentHashMap<String, Map<String, String>>();
	private static Map<String, Properties>  properties= new ConcurrentHashMap<String, Properties>();

	private static String defaultPropertiesFile = "config.properties";


    private PropertiesUtils() {
    }

    /**
	 * 从默认配置文件获取指定属性值
	 *
	 * @param property 属性名
	 * @return	属性值
	 */
	public static String getPropertiesValue(String property) {
		return getPropertiesValue(defaultPropertiesFile, property);
	}

	/**
	 * 以Map形式获取配置文件所有属性键值对
	 * @param propertiesFile	配置文件名称
	 * @return	 Map形式所有属性键值对
	 */
	public static Map<String,String> getProperties(String propertiesFile) {

		Map<String,String> props=Collections.emptyMap();

		if (resources.containsKey(propertiesFile)) {
			props=resources.get(propertiesFile);
		}else {
			props=loadPropertyFile(propertiesFile);
		}

		return props;
	}

	/**
	 * 根据配置文件获取指定属性值
	 *
	 * @param propertiesFile	属性文件
	 * @param property		属性名
	 * @return	属性值
	 */
	public static String getPropertiesValue(String propertiesFile,String property) {
		String val = "";

		//先从resource bundle中取
		if (resources.containsKey(propertiesFile)) {
			val = resources.get(propertiesFile).get(property);
		} else {
			Map<String,String> resources1=loadPropertyFile(propertiesFile);
			if (null!=resources1) {
				val = resources1.get(property);
			}
		}
		//取不到从Props里面取
		if("".equals(val) && properties.containsKey(propertiesFile)) {
			return properties.get(propertiesFile).getProperty(property);
		}
		return val;
	}

	/**
	 * 加载指定文件的所有属性信息
	 * 
	 * @param propertiesFile	配置文件名
	 * @return	 Map形式所有属性键值对
	 */
	private static Map<String, String> loadPropertyFile(String propertiesFile) {
		try {
			Map<String, String> result = new HashMap<String, String>();
			result = PropertiesLoader.loadProps(propertiesFile);
			resources.put(propertiesFile, result);
			return result;
		} catch (Exception e) {
			// ignore
		}
        return null;
	}

	/**
	 * 设置默认配置文件
	 *
	 * @param propertiesFile	配置文件名
	 */
	public static void setDefault(String propertiesFile) {
		defaultPropertiesFile = propertiesFile;
	}

	/**
	 * 添加配置
	 * @param propKey	配置主键
	 * @param props	配置信息
	 */
	public static void put(String propKey,Properties props) {
		properties.put(propKey,props);
	}

}
